我有类似以下页面的内容:
www.domain.com/games/?puzzle=value
我希望它显示为
www.domain.com/games/value
这是我写的转发到原始域的重写导致500内部服务器错误:
#forward games/value to games/?puzzle=value
RewriteRule ^games/(.+?)/?$ /games/index.php?puzzle=$1 [L,QSA]
有人会帮我解决我的问题吗,我真的很难重写。
编辑:
我目前正在使用以下内容在我的主页上允许来自foo的参数。
# Internally forward /value to /index.php?foo=value
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/?$ /index.php?foo=$1 [L,QSA]
如果我将其删除,那么以下内容将适用于我想要的内容,但我需要两个实例都能正常工作。
#forward games/value to games/?puzzle=value
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^games/(.+?)/?$ /games/index.php?puzzle=$1 [L,QSA]
答案 0 :(得分:1)
这是由于循环,因为重写后的URL也匹配您的模式^games/(.+?)/?$
。
您需要从此重写规则中排除实际文件/目录:
#forward games/value to games/?puzzle=value
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^games/(.+?)/?$ /games/index.php?puzzle=$1 [L,QSA]
# Internally forward /value to /index.php?foo=value
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/?$ /index.php?foo=$1 [L,QSA]