[英]htaccess for pretty url slugs
我正在尝试在项目的根目录中建立一个.htaccess
文件,这将使我能够使用漂亮的url。
我有三种类型的页面:
但是,实际上,我需要news.php
和view.php
,后者将在其中处理用于比赛/排名的标记,而新闻报道将是site-name/news/the-slug-of-the-story/
这是我到目前为止的内容:
RewriteEngine On
RewriteBase /the-site-name/
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule . /news.php [L]
RewriteRule ^news/(.*)/([0-9]+) news.php?slug=/news/$1 [L]
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule . /view.php [L]
RewriteRule ^tournaments/(.*)/([0-9]+) view.php?page=/tournaments/$1 [L]
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule . /view.php [L]
RewriteRule ^rankings/(.*)/([0-9]+) view.php?page=/rankings/$1 [L]
但是,所有链接/ tournaments / / rankings /似乎都在使用news.php模板,而不是view.php。
我有什么想念的吗?
我现在可以使用.htaccess
了-这是最终设置
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^news/?$ news.php?slug=/news/ [L]
RewriteRule ^news/(.*)/([0-9]*) news.php?slug=/news/$1/ [L]
RewriteRule ^rankings/?$ view.php?page=/rankings/ [L]
RewriteRule ^tournaments/?$ view.php?page=/tournaments/ [L]
</IfModule>
现在唯一的错误是/news/name-of-story/
可以正常运行,但没有最终版本/
如果有人访问/news/name-of-story
,它将断开。
如果这项工作能以与XAMPP相同的方式在我的数字海洋上工作,我会感到惊讶,但是当我到达它时,我将跨越那座桥=]
我还加了
RewriteRule ^news/(.*) news.php?slug=/news/$1/ [L]
处理缺少斜杠的问题
[L]表示如果规则匹配,则不要再处理低于此规则的RewriteRules。
未经测试,但应为:
RewriteEngine On
RewriteBase /the-site-name/
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^news/(.*)/([0-9]+) news.php?slug=/news/$1 [L]
RewriteRule ^tournaments/(.*)/([0-9]+) view.php?page=/tournaments/$1 [L]
RewriteRule ^rankings/(.*)/([0-9]+) view.php?page=/rankings/$1 [L]
更新:(已测试)-注意:已添加/$2
(可能不是您想要的,可以将其删除)
RewriteEngine On
RewriteBase /the-site-name/
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^news/?$ news.php?slug=/news/ [L]
RewriteRule ^news/(.*)/?([0-9]*) news.php?slug=/news/$1/$2 [L]
RewriteRule ^rankings/?$ view.php?page=/rankings/ [L]
RewriteRule ^rankings/(.*)/([0-9]+) view.php?page=/rankings/$1/$2 [L]
RewriteRule ^tournaments/?$ view.php?page=/tournaments/ [L]
RewriteRule ^tournaments/(.*)/([0-9]+) view.php?page=/tournaments/$1/$2 [L]
说明:
^news/?$ # For "news" or "news/"
^news/(.*)/([0-9]+) news.php?slug=/news/$1/$2 # Added $2 for the second capture group
我目前无法对此进行测试,但是据我所记得,这些行将导致以下情况:
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule . /news.php [L]
那个.
基本上是说“将不是文件或目录的所有路径都重写到news.php”。
RewriteRule
工作原理如下:
RewriteRule Pattern Substitution
模式.
意味着任何东西,可能会导致问题。
尝试取出这些行:
RewriteRule . /news.php [L]
RewriteRule . /view.php [L]
RewriteRule . /view.php [L]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.