第一次在这里使用mod_rewrite我有这个规则在IIS上工作:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="services" stopProcessing="true">
<match url="^([a-z]+)/service/([a-zA-Z-]+)" />
<action type="Rewrite" url="serveis.php?id={R:2}&lang={R:1}"/>
</rule>
<rule name="categories" stopProcessing="true">
<match url="^([a-z]+)/category/([a-zA-Z-]+)" />
<action type="Rewrite" url="subhome.php?id={R:2}&lang={R:1}"/>
</rule>
<rule name="index_idioma" stopProcessing="true">
<match url="^([a-z]+)/index" />
<action type="Rewrite" url="index.php?lang={R:1}"/>
</rule>
<rule name="index" stopProcessing="true">
<match url="http://www.domain.com" />
<action type="Rewrite" url="http://www.domain.com/index.php?lang=en"/>
</rule>
<rule name="kinds" stopProcessing="true">
<match url="^([a-z]+)/kind" />
<action type="Rewrite" url="tipusserveis.php?lang={R:1}"/>
</rule>
<rule name="company" stopProcessing="true">
<match url="^([a-z]+)/our_company" />
<action type="Rewrite" url="/empresa.php?lang={R:1}" />
</rule>
<rule name="contact" stopProcessing="true">
<match url="^([a-z]+)/contact" />
<action type="Rewrite" url="/contacto.php?lang={R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
现在我想使用apache的mod_rewrite来实现这个:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/([a-z]+) index.php?lang=$1 [NC,L]
RewriteRule ^/([a-z]+)/our_company/?$ empresa.php?lang=$1 [NC,L]
RewriteRule ^/([a-z]+)/contact/?$ contacto.php?lang=$1 [NC,L]
RewriteRule ^/([a-z]+)/service/([A-Za-z0-9-]+)/?$ serveis.php?id=$2&lang=$1 [NC,L]
RewriteRule ^/([a-z]+)/category/([A-Za-z0-9-]+)/?$ subhome.php?id=$2&lang=$1 [NC,L]
RewriteRule ^/([a-z]+)/kind/([A-Za-z0-9-]+)/?$ tipusserveis.php?id=$2&lang=$1 [NC,L]
</IfModule>
但他们都没有工作。
有人可以在这帮助我,至少给我一些关于我应该如何做的指示?
编辑:
Plesk Panel会自动将其添加到httpd.conf
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com$1 [L,R=301]
<IfModule>
我想它会从网址中删除www,但我不知道它是否也会停止应用其他规则。 感谢
答案 0 :(得分:1)
由于您的URI模式中缺少锚点mod_rewrite
和^
,您在$
中收到错误。在根.htaccess
或Apache config中尝试这些规则:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteRule ^/?([a-z]+)/?$ index.php?lang=$1 [NC,L,QSA]
RewriteRule ^/?([a-z]+)/our_company/?$ empresa.php?lang=$1 [NC,L,QSA]
RewriteRule ^/?([a-z]+)/contact/?$ contacto.php?lang=$1 [NC,L,QSA]
RewriteRule ^/?([a-z]+)/service/([a-z0-9-]+)/?$ serveis.php?id=$2&lang=$1 [NC,L,QSA]
RewriteRule ^/?([a-z]+)/category/([a-z0-9-]+)/?$ subhome.php?id=$2&lang=$1 [NC,L,QSA]
RewriteRule ^/?([a-z]+)/kind/([a-z0-9-]+)/?$ tipusserveis.php?id=$2&lang=$1 [NC,L,QSA]
</IfModule>
答案 1 :(得分:1)
1)您的分配(第二个参数)不能是相对路径。它需要以/或以重定向开始,而不仅仅是例如“的index.php”。这是你的400s的直接原因 - 你的错误日志可能清楚地显示了一个不以/开头的URL路径(这是无效的)
2)你应该忽略将这些规则放在.htaccess中的建议。这使得mod_rewrite维护起来要复杂得多。