[英].htaccess url rewriting not working?
老实说,我对.htaccess
经验很少,因为我一直想尽可能地远离它。 但是,我最近想整理一下URL,我发现可以通过.htaccess
和重写来实现。
基本上,我想像这样重写网址:
www.mysite.com/profile.php?id=48194
像这样:
www.mysite.com/profile/48194
这是我目前拥有的代码:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteRule ^profile/(.*)/$ profile.php?id=$1
我要使用的行位于最底端, RewriteRule ^profile/(.*)/$ profile.php?id=$1
。 其余的用于从网址中删除页面扩展。 我将$1
更改$1
$2
以为它可能与上面的代码冲突,但是什么都没有改变。
我还删除了除RewriteEngine on
之外的所有代码RewriteEngine on
并在最后一行认为代码可能有冲突,但是再次没有更改或工作。 其余代码确实可以正常工作,即从url中删除扩展名,因此我知道重写的事情已经开始了。
有人可以尝试分解并解释我做错了什么以及所有这些工作原理吗? 除了提供我要完成的事情的可行示例之外?
提前致谢!
更改规则的顺序并使用MultiViews
选项。 Option的MultiViews
由Apache's content negotiation module
,该Apache's content negotiation module
在mod_rewrite
之前运行,并使Apache服务器匹配文件扩展名。 因此/file
可以位于URL中,但它将提供/file.php
。
RewriteEngine on
RewriteBase /
RewriteRule ^profile/([^/]+)/?$ profile.php?id=$1 [L,QSA,NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.