Apache htaccess用于通用漂亮的URL

时间:2016-07-12 20:27:31

标签: apache .htaccess mod-rewrite

我试图让我的.htaccess工作疯了,并且跟着几个例子没有成功(当然修改它们因为它们大多是静态的)。

我的问题是,我需要一个通用的htaccess重定向到随机的php文件(省略php扩展名),例如:

  • / xxxxx / loads /xxxxx.php
  • / yyyyy / zz加载/yyyyy.php?param=zz

这是我努力的结果并不成功:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTP_HOST} ^MYDOMAIN [NC]
RewriteRule ^(.*)$ http://MYDOMAIN/$1 [L,R=301,NC]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*?)/?$               /$1.php             [NC,L]
RewriteRule ^(.*?)/?(.+)$           /$1.php?param=$2    [NC,L]

</IfModule>

问题是我在任何请求上都遇到500服务器错误。 如果我评论最后一条规则,那么:

  • / xxxx正常工作
  • / xxxx /正常工作
  • / xxxx / yyyy无法正常工作(它不会重写想要的内容 参数)。

任何帮助都将受到赞赏,因为我不知道这里发生了什么。

P.S。我还测试了一个&#34;停止&#34;开头的规则如下:

RewriteRule ^.*\.php.*$ - [L]

然后我可以在没有500服务器错误的情况下使用这两个规则,只需在参数情况下使用404。

1 个答案:

答案 0 :(得分:1)

您获得500,因为您的上一条规则在没有任何条件的情况下运行并导致无限循环。

您可以在站点根目录中使用这些规则.htaccess:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^([^/]+)/([^/])/?$ $1.php?param=$2 [QSA,L]