繁体   English   中英

htaccess漂亮的URL头

[英]htaccess for pretty url slugs

我正在尝试在项目的根目录中建立一个.htaccess文件,这将使我能够使用漂亮的url。

我有三种类型的页面:

  1. news.php
  2. 锦标赛
  3. ranks.php

但是,实际上,我需要news.phpview.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。

我有什么想念的吗?

更新时间:2018年2月13日下午13:44

我现在可以使用.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相同的方式在我的数字海洋上工作,我会感到惊讶,但是当我到达它时,我将跨越那座桥=]

更新:13:51 PM

我还加了

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM