PHP Pretty URLs 两个 mod_rewrite 规则的组合?

Posted

技术标签:

【中文标题】PHP Pretty URLs 两个 mod_rewrite 规则的组合?【英文标题】:PHP Pretty URLs combination of two mod_rewrite rules? 【发布时间】:2016-12-17 18:19:12 【问题描述】:

我在根文件夹中有这个 .htaccess 代码来替换这个 url:localhost/mysite/profile.php?username="someone" 变成 localhost/mysite/someone

RewriteEngine On 
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ /mysite/profile.php?username=$1

这工作正常,但我想要包含子页面,例如 about 页面为 localhost/mysite/about 而不是 localhost/mysite/about.php。子页面也在根文件夹中。

如何实现这两个重写?

【问题讨论】:

这个.htaccess 是否位于mysite/ 目录中? 是的,在 localhost/mysite 中。 index.php 和 about.php 所在的位置。 FWIW...“将这个 url:localhost/mysite/profile.php?username="someone" 替换为 localhost/mysite/someone” - 似乎很多人经常使用这种 reverse-like 描述 (?),但是你的代码实际上完全相反....../mysite/someone被重写为/mysite/profile.php?username=someone。 (?!) 【参考方案1】:

试试下面的代码,它对我来说很好。

RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

【讨论】:

它适用于子页面,但另一个已被替换,它现在不起作用,它是来自 localhost/mysite/profile.php 的 localhost/mysite/user123?用户名=用户名123 这将与现有指令冲突(无论顺序如何)。您需要包含 条件 以排除看起来像用户配置文件的 URL(即与物理文件不直接匹配的 URL)。【参考方案2】:

试试这个

RewriteEngine On 
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^mysite/([A-Za-z0-9-]+)$ /mysite/profile.php?username=$1

【讨论】:

抱歉,两者现在都不起作用。 @anubhava 已经回答了我的问题。多谢你们! :)【参考方案3】:

您可以在mysite/.htaccess

RewriteEngine On 
RewriteBase /mysite/

# add .php internally to files
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

# handles profile URLs
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^([\w-]+)/?$ profile.php?username=$1 [L,QSA]

【讨论】:

哇,先生真快!太感谢了! :D

以上是关于PHP Pretty URLs 两个 mod_rewrite 规则的组合?的主要内容,如果未能解决你的问题,请参考以下文章

Django中关于URL配置文件urls.py的理解

php pretty_dump

PHP pretty_json

PHP json_encode JSON_PRETTY_PRINT:如何打印不同的格式?

markdown [漂亮的打印机] Phpunit Pretty Printer安装#phpunit #laravel #prettyprinter #intsall #php

PHP Slugify功能(清洁URLS)