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 规则的组合?的主要内容,如果未能解决你的问题,请参考以下文章
PHP json_encode JSON_PRETTY_PRINT:如何打印不同的格式?
markdown [漂亮的打印机] Phpunit Pretty Printer安装#phpunit #laravel #prettyprinter #intsall #php